package co.gov.medellin.ssti.sub.web.action;

import java.io.IOException;
import java.util.Calendar;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.beans.factory.annotation.Autowired;

import co.gov.medellin.ssti.sub.common.excepcion.SUBException;
import co.gov.medellin.ssti.sub.common.util.FiltrosReportesUtil;
import co.gov.medellin.ssti.sub.model.dao.exception.DAOException;
import co.gov.medellin.ssti.sub.model.service.AtributosService;
import co.gov.medellin.ssti.sub.model.service.RepBeneficioOtorgadoService;
import co.gov.medellin.ssti.sub.model.service.VflexService;
import co.gov.medellin.ssti.sub.model.vo.AtributoVO;
import co.gov.medellin.ssti.sub.model.vo.CondicionConsultaVO;
import co.gov.medellin.ssti.sub.model.vo.RepAtributoVO;
import co.gov.medellin.ssti.sub.model.vo.RepDetBeneficiarioVO;
import co.gov.medellin.ssti.sub.model.vo.VflexVO;

public class SelectionFilterAction extends Action {
	@Autowired
	AtributosService atributosServiceImpl;
	@Autowired
	RepBeneficioOtorgadoService repBeneficioOtorgadoServiceImpl;
	@Autowired
	VflexService vflexServiceImpl;

	/**
	 * This is the main action called from the Struts framework.
	 * 
	 * @param mapping
	 *            The ActionMapping used to select this instance.
	 * @param form
	 *            The optional ActionForm bean for this request.
	 * @param request
	 *            The HTTP Request we are processing.
	 * @param response
	 *            The HTTP Response we are processing.
	 * @return
	 * @throws java.io.IOException
	 * @throws javax.servlet.ServletException
	 */
	@SuppressWarnings("unchecked")
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {

		HttpSession session = request.getSession();
		Object errorfecha = (Object) session.getAttribute("errorfecha");

		if (errorfecha == null) {
			RepDetBeneficiarioVO obParametro = (RepDetBeneficiarioVO) session
					.getAttribute("Parametros");
			// Long codeSubpro = null;
			if (obParametro != null) {
				// codeSubpro = obParametro.getCodeSubprograma();
			}

			// List lbeneotorgado = new LinkedList();
			// lbeneotorgado = (List)
			// session.getAttribute("BeneficiosOtorgado");
			boolean elim = false;

			Object limpiar = (Object) session.getAttribute("limpiar");
			if (limpiar != null) {
				session.removeAttribute("listaatributos");
				session.removeAttribute("limpiar");
			}

			List<CondicionConsultaVO> lFiltrado;
			// Long cont;

			Object obAccion = (Object) request.getParameter("accion");
			Collection<CondicionConsultaVO> coFiltrado = (Collection<CondicionConsultaVO>) session
					.getAttribute("ListaFiltrado");
			// Object obListaFil = (Object)
			// session.getAttribute("ListaFiltrado");

			if ((Object) coFiltrado != null) {
				String strCodigo = request.getParameter("codigos");
				if ((Object) strCodigo != null && !strCodigo.equals("")) {

					elim = true;

					// CondicionConsultaVO objCondiCons = new
					// CondicionConsultaVO();
					lFiltrado = (List) session.getAttribute("ListaFiltrado");

					int index = Integer.parseInt(strCodigo);
					int count = 1;
					Iterator<CondicionConsultaVO> it = lFiltrado.iterator();
					while (it.hasNext()) {
						it.next();
						if (index == count) {
							it.remove();
							break;
						} else {
							count++;
						}
					}

				}
			}
			if (!elim) {
				if (obAccion.equals("")) {
					lFiltrado = new LinkedList<CondicionConsultaVO>();

					String ArrAtri[] = { "TIPO_DOCUMENTO", "NUMERO_DOCUMENTO",
							"PRIMER_NOMBRE", "SEGUNDO_NOMBRE",
							"PRIMER_APELLIDO", "SEGUNDO_APELLIDO",
							"DIRECCION_DESCRIPTIVA", "DIRECCION_ENCASILLADA",
							"SEXO", "FECHA_NACIMIENTO", "VFL_CODIGO_COMUNA",
							"VFL_CODIGO_ZONA", "LOCALIZACION_COBAMA",
							"VFL_CODIGO_BARRIO", "TELEFONO", "ETNIA",
							"CORREO_ELECTRONICO", "FICHA_SISBEN",
							"HOGAR_SISBEN", "ORDEN_SISBEN", "NIVEL_SISBEN",
							"PUNTAJE_SISBEN", "FE_ENCUESTA_SISBEN",
							"DISCAPACIDAD_SISBEN", "EDAD",
							FiltrosReportesUtil.HECHO_VICTIMIZANTE };
					String ArrAtri2[] = { "TIPO DOCUMENTO", "NUMERO DOCUMENTO",
							"PRIMER NOMBRE", "SEGUNDO NOMBRE",
							"PRIMER APELLIDO", "SEGUNDO APELLIDO",
							"DIRECCION DESCRIPTIVA", "DIRECCION ENCASILLADA",
							"SEXO", "FECHA NACIMIENTO", "COMUNA/CORREGIMIENTO",
							"ZONA", "LOCALIZACION COBAMA", "BARRIO/VEREDA",
							"TELEFONO", "ETNIA", "CORREO ELECTRONICO",
							"FICHA SISBEN", "HOGAR SISBEN", "ORDEN SISBEN",
							"NIVEL SISBEN", "PUNTAJE SISBEN",
							"FECHA ENCUESTA SISBEN", "DISCAPACIDAD SISBEN",
							"EDAD", FiltrosReportesUtil.HECHO_VICTIMIZANTE_E };
					List<RepAtributoVO> lAtributosBeneficiario = new LinkedList<RepAtributoVO>();
					List<RepAtributoVO> lAtriBeneficiarios = new LinkedList<RepAtributoVO>();
					for (int j = 0; j < ArrAtri2.length; j++) {
						RepAtributoVO repatriVO = new RepAtributoVO();
						repatriVO.setNombre(ArrAtri[j]);
						repatriVO.setEtiqueta(ArrAtri2[j]);
						repatriVO.setOrigen("G");
						lAtributosBeneficiario.add(repatriVO);
						if (j != 6 && j != 7) {
							RepAtributoVO repatri2VO = new RepAtributoVO();
							repatri2VO.setNombre(ArrAtri[j]);
							repatri2VO.setEtiqueta(ArrAtri2[j]);
							repatri2VO.setOrigen("G");
							lAtriBeneficiarios.add(repatri2VO);
						}
					}
					session.setAttribute("listabeneficiario",
							lAtributosBeneficiario);
					session.setAttribute("lbeneficiarios", lAtriBeneficiarios);
				} else {
					String strCodAtributo = (String) request
							.getParameter("codigo");
					String strNombreAtri = "";
					session.setAttribute("codigo", strCodAtributo);
					Collection<VflexVO> coListas = null;
					int espgen = 0;
					int ir = 0;
					if (!strCodAtributo.equals("nulo")) {
						List<RepAtributoVO> lVerificarOrigen = (List<RepAtributoVO>) session
								.getAttribute("listabeneficiario");
						int tamaVerifOrigen = lVerificarOrigen.size();
						if (tamaVerifOrigen != 0) {
							for (int i = 0; i < tamaVerifOrigen; i++) {
								RepAtributoVO VO = (RepAtributoVO) lVerificarOrigen
										.get(i);
								String comparacion = VO.getNombre();
								if (strCodAtributo.equals(comparacion)) {
									ir = 1;
								}
							}
						}
					}
					if (!strCodAtributo.equals("nulo")) {
						// /////////////////
						coListas = new LinkedList<VflexVO>();
						// Proceso para llenar la lista de filtrado con los
						// atributos del beneficiario
						if (strCodAtributo.equals("TIPO_DOCUMENTO")) {
							strNombreAtri = "TIPO DOCUMENTO";
							espgen = 1;
							session.setAttribute("tipodato", "A");
							String Arrlista[] = { "CEDULA CIUDADANIA",
									"CEDULA EXTRANGERIA", "NIT", "PASAPORTE",
									"REGISTRO CIVIL", "TARJETA IDENTIDAD",
									"NIP", "NUIP", "NISE", "CABILDO", "OTRO" };
							String Arrlista2[] = { "C", "E", "N", "P", "R",
									"T", "I", "U", "S", "A", "O" };
							for (int h = 0; h < Arrlista2.length; h++) {
								VflexVO valorVO = new VflexVO();
								valorVO.setDescVflex(Arrlista[h]);
								valorVO.setNombreVflex(Arrlista2[h] + "~"
										+ Arrlista[h]);
								valorVO.setCodigoVflex(Arrlista2[h]);
								coListas.add(valorVO);
							}
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.NUMERO_DOCUMENTO)) {
							strNombreAtri = FiltrosReportesUtil.NUMERO_DOCUMENTO_E;
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato", "A");
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.PRIMER_NOMBRE)) {
							strNombreAtri = FiltrosReportesUtil.PRIMER_NOMBRE_E;
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato", "A");
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.SEGUNDO_NOMBRE)) {
							strNombreAtri = FiltrosReportesUtil.SEGUNDO_NOMBRE_E;
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato", "A");
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.PRIMER_APELLIDO)) {
							strNombreAtri = FiltrosReportesUtil.PRIMER_APELLIDO_E;
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato", "A");
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.SEGUNDO_APELLIDO)) {
							strNombreAtri = FiltrosReportesUtil.SEGUNDO_APELLIDO_E;
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato", "A");
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.SEXO)) {
							strNombreAtri = FiltrosReportesUtil.SEXO_E;
							espgen = 1;
							session.setAttribute("tipodato", "A");
							String Arrlista[] = { "MASCULINO", "FEMENINO" };
							String Arrlista2[] = { "M", "F" };
							for (int h = 0; h < 2; h++) {
								VflexVO valorVO = new VflexVO();
								valorVO.setDescVflex(Arrlista[h]);
								valorVO.setNombreVflex(Arrlista2[h] + "~"
										+ Arrlista[h]);
								valorVO.setCodigoVflex(Arrlista2[h]);
								coListas.add(valorVO);
							}
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.FECHA_NACIMIENTO)) {
							strNombreAtri = FiltrosReportesUtil.FECHA_NACIMIENTO_E;
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato", "F");
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.COMUNA)) {
							strNombreAtri = FiltrosReportesUtil.COMUNA_E;
							espgen = 1;
							session.setAttribute("tipodato", "A");
							String strNomTipoVfl = "COMUNA";

							try {
								coListas = vflexServiceImpl
										.findVflex(strNomTipoVfl);
							} catch (DAOException e) {
								SUBException.logDebugError("", e);
							}
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.ZONA)) {
							strNombreAtri = FiltrosReportesUtil.ZONA_E;
							espgen = 1;
							session.setAttribute("tipodato", "A");
							try {
								coListas = vflexServiceImpl
										.findVflex(strNombreAtri);
							} catch (DAOException e) {
								SUBException.logDebugError("", e);
							}
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo.equals("LOCALIZACION_COBAMA")) {
							strNombreAtri = "LOCALIZACION COBAMA";
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato", "N");
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.BARRIO)) {
							strNombreAtri = FiltrosReportesUtil.BARRIO_E;
							espgen = 1;
							session.setAttribute("tipodato", "A");
							try {
								coListas = vflexServiceImpl
										.findVflex(VflexService.BARRIO);
							} catch (DAOException e) {
								SUBException.logDebugError("", e);
							}
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.TELEFONO)) {
							strNombreAtri = FiltrosReportesUtil.TELEFONO_E;
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato", "A");
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.ETNIA)) {
							strNombreAtri = FiltrosReportesUtil.ETNIA_E;
							espgen = 1;
							session.setAttribute("tipodato", "A");
							String Arrlista[] = { "AFROCOLOMBIANO", "INDIGENA",
									"OTRA" };
							String Arrlista2[] = { "A", "I", "O" };
							for (int h = 0; h < 3; h++) {
								VflexVO valorVO = new VflexVO();
								valorVO.setDescVflex(Arrlista[h]);
								valorVO.setNombreVflex(Arrlista2[h] + "~"
										+ Arrlista[h]);
								valorVO.setCodigoVflex(Arrlista2[h]);
								coListas.add(valorVO);
							}
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.CORREO_ELECTRONICO)) {
							strNombreAtri = FiltrosReportesUtil.CORREO_ELECTRONICO_E;
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato", "A");
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.FICHA_SISBEN)) {
							strNombreAtri = FiltrosReportesUtil.FICHA_SISBEN_E;
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato",
									FiltrosReportesUtil.TIPO_ALFANUMERICO);
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.HOGAR_SISBEN)) {
							strNombreAtri = FiltrosReportesUtil.HOGAR_SISBEN_E;
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato",
									FiltrosReportesUtil.TIPO_ALFANUMERICO);
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.ORDEN_SISBEN)) {
							strNombreAtri = FiltrosReportesUtil.ORDEN_SISBEN_E;
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato",
									FiltrosReportesUtil.TIPO_ALFANUMERICO);
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo.equals("NIVEL_SISBEN")) {
							strNombreAtri = "NIVEL SISBEN";
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato",
									FiltrosReportesUtil.TIPO_ALFANUMERICO);
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.PUNTAJE_SISBEN)) {
							strNombreAtri = FiltrosReportesUtil.PUNTAJE_SISBEN_E;
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato",
									FiltrosReportesUtil.TIPO_ALFANUMERICO);
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo.equals("FE_ENCUESTA_SISBEN")) {
							strNombreAtri = FiltrosReportesUtil.FECHA_ENCUESTA_SISBEN_E;
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato",
									FiltrosReportesUtil.TIPO_FECHA);
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.DISCAPACIDAD_SISBEN)) {
							strNombreAtri = FiltrosReportesUtil.DISCAPACIDAD_SISBEN_E;
							espgen = 1;
							session.setAttribute("tipodato",
									FiltrosReportesUtil.TIPO_ALFANUMERICO);
							String Arrlista[] = { "SI", "NO" };
							String Arrlista2[] = { "SI", "NO" };
							for (int h = 0; h < 2; h++) {
								VflexVO valorVO = new VflexVO();
								valorVO.setDescVflex(Arrlista[h]);
								valorVO.setNombreVflex(Arrlista2[h] + "~"
										+ Arrlista[h]);
								valorVO.setCodigoVflex(Arrlista2[h]);
								coListas.add(valorVO);
							}
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equals(FiltrosReportesUtil.HECHO_VICTIMIZANTE)) {
							// abandon all hope. Solo sigo la corriente.
							strNombreAtri = FiltrosReportesUtil.HECHO_VICTIMIZANTE_E;
							session.setAttribute("tipodato",
									FiltrosReportesUtil.TIPO_NUMERICO);
							espgen = 1;
							coListas = null;
							coListas = vflexServiceImpl
									.findVflex(strNombreAtri);
							session.setAttribute("tipodato",
									FiltrosReportesUtil.TIPO_ALFANUMERICO);
							session.setAttribute("listavfl", coListas);
						} else if (strCodAtributo
								.equalsIgnoreCase(FiltrosReportesUtil.EDAD)) {
							// TODO: manejar filter edad.
							strNombreAtri = FiltrosReportesUtil.EDAD_E;
							espgen = 1;
							coListas = null;
							session.setAttribute("tipodato", "T");
							session.setAttribute("listavfl", coListas);
						}
						// fin proceso
						if (obAccion.equals("2")) {
							if (ir == 1) {
								Object fil = (Object) session
										.getAttribute("ListaFiltrado");
								if (fil != null) {
									lFiltrado = (List<CondicionConsultaVO>) session
											.getAttribute("ListaFiltrado");
								} else {
									lFiltrado = new LinkedList<CondicionConsultaVO>();
								}

								CondicionConsultaVO objCondConsVO = new CondicionConsultaVO();
								objCondConsVO.setCodcampo(strCodAtributo);
								objCondConsVO.setCampo(strNombreAtri);
								String strdato = (String) session
										.getAttribute("tipodato");
								objCondConsVO.setTipoCampo(strdato);

								objCondConsVO.setOrigen("G");
								objCondConsVO
										.setCodigo((lFiltrado.size()) + "");
								String filtro = request.getParameter("filter");
								int iFiltro = Integer.parseInt(filtro.trim());

								switch (iFiltro) {
								case 1:
									objCondConsVO
											.setFiltro(FiltrosReportesUtil.MAYOR_IGUAL_E);
									objCondConsVO
											.setCodFiltro(FiltrosReportesUtil.MAYOR_IGUAL);
									break;
								case 2:
									objCondConsVO
											.setFiltro(FiltrosReportesUtil.MENOR_IGUAL_E);
									objCondConsVO
											.setCodFiltro(FiltrosReportesUtil.MENOR_IGUAL);
									break;
								case 3:
									objCondConsVO
											.setFiltro(FiltrosReportesUtil.IGUAL_E);
									objCondConsVO
											.setCodFiltro(FiltrosReportesUtil.IGUAL);
									break;
								case 4:
									objCondConsVO
											.setFiltro(FiltrosReportesUtil.DIFERENTE_E);
									objCondConsVO
											.setCodFiltro(FiltrosReportesUtil.DIFERENTE);
									break;
								case 5:
									objCondConsVO
											.setFiltro(FiltrosReportesUtil.MENOR_E);
									objCondConsVO
											.setCodFiltro(FiltrosReportesUtil.MENOR);
									break;
								case 6:
									objCondConsVO
											.setFiltro(FiltrosReportesUtil.MAYOR_E);
									objCondConsVO
											.setCodFiltro(FiltrosReportesUtil.MAYOR);
									break;
								case 7:
									objCondConsVO
											.setFiltro(FiltrosReportesUtil.ENTRE_E);
									objCondConsVO
											.setCodFiltro(FiltrosReportesUtil.ENTRE);
									break;
								case 8:
									objCondConsVO
											.setFiltro(FiltrosReportesUtil.PARECIDO_E);
									objCondConsVO
											.setCodFiltro(FiltrosReportesUtil.PARECIDO);
									break;
								}
								Object obValorComparar = (Object) request
										.getParameter("valor");
								Object obValor2Comparar = (Object) request
										.getParameter("valor2");
								if (obValorComparar != null) {
									if (!strdato.equals("F")) {
										objCondConsVO.setValor(request
												.getParameter("valor"));
										objCondConsVO.setEtiquetaValor(request
												.getParameter("valor"));
									} else {
										String strFecha = request
												.getParameter("valor");
										// TODO: validar fecha.
										objCondConsVO.setValor(strFecha);
										objCondConsVO
												.setEtiquetaValor(strFecha);
									}
								} else {
									String descVflex = request
											.getParameter("descVflex");
									String codDesc[] = descVflex.split("~");
									objCondConsVO.setValor(codDesc[0]);
									objCondConsVO.setEtiquetaValor(codDesc[1]);
								}
								String objValor2 = (String) obValor2Comparar;
								if (obValor2Comparar != null
										&& !objValor2.equalsIgnoreCase("")) {
									if (!strdato.equals("F")) {
										objCondConsVO.setValor2(request
												.getParameter("valor2"));
									} else {
										String strFecha = request
												.getParameter("valor2");
										// TODO: validar fecha.
										objCondConsVO.setValor2(strFecha);

									}
								}

								// copiado de SeleccionAction
								// ******************************************************
								// LOGICA PARA CONVERTIR LA EDAD EN FECHAS
								// DE NACIMIENTO
								if (objCondConsVO.getCampo().equalsIgnoreCase(
										"EDAD")) {
									// Setea en el valor el numero de anhos
									// para usar en el jsp
									objCondConsVO
											.setEtiquetaValor(objCondConsVO
													.getValor());

									Calendar cal = Calendar.getInstance();
									int dia = cal.get(Calendar.DATE);
									int mes = cal.get(Calendar.MONTH) + 1;
									int anho = cal.get(Calendar.YEAR);
									int valor1 = Integer.parseInt(objCondConsVO
											.getValor());
									int valor2 = 0;
									int anhoIni = 0;
									int anhoFin = 0;
									anhoFin = anho - valor1;

									if (objCondConsVO.getValor2() != null) {
										objCondConsVO
												.setEtiquetaValor2(objCondConsVO
														.getValor2());
										valor2 = Integer.parseInt(objCondConsVO
												.getValor2());
									}

									// Guarda en el valor1 el anho inicial
									// anhoIni = anho - valor1;
									// Guarda en el valor1 el anho final
									anhoIni = anho - valor2;

									objCondConsVO
											.setCampo(FiltrosReportesUtil.EDAD);
									objCondConsVO
											.setCodcampo(FiltrosReportesUtil.FECHA_NACIMIENTO);
									objCondConsVO
											.setTipoCampo(FiltrosReportesUtil.TIPO_FECHA);

									// Guarda el valor de anhos en formato
									// fecha para usar en el query
									objCondConsVO.setValor(dia + "/" + 0 + ""
											+ mes + "/" + anhoIni);
									objCondConsVO.setValor2(dia + "/" + 0 + ""
											+ mes + "/" + anhoFin);

									// Cambia el filtro si en este solo se
									// usa un valor.
									if (!objCondConsVO.getCodFiltro()
											.equalsIgnoreCase(
													FiltrosReportesUtil.ENTRE)) {
										objCondConsVO.setValor(dia + "/" + 0
												+ "" + mes + "/" + anhoFin);

										if (objCondConsVO
												.getCodFiltro()
												.equalsIgnoreCase(
														FiltrosReportesUtil.MENOR)) {
											objCondConsVO
													.setCodFiltro(FiltrosReportesUtil.MAYOR);
										} else if (objCondConsVO
												.getCodFiltro()
												.equalsIgnoreCase(
														FiltrosReportesUtil.MENOR_IGUAL)) {
											objCondConsVO
													.setCodFiltro(FiltrosReportesUtil.MAYOR_IGUAL);
										} else if (objCondConsVO
												.getCodFiltro()
												.equalsIgnoreCase(
														FiltrosReportesUtil.MAYOR)) {
											objCondConsVO
													.setCodFiltro(FiltrosReportesUtil.MENOR);
										} else if (objCondConsVO
												.getCodFiltro()
												.equalsIgnoreCase(
														FiltrosReportesUtil.MAYOR_IGUAL)) {
											objCondConsVO
													.setCodFiltro(FiltrosReportesUtil.MENOR_IGUAL);
										} else if (objCondConsVO
												.getCodFiltro()
												.equalsIgnoreCase(
														FiltrosReportesUtil.IGUAL)) {

											if (dia == 30
													&& (mes == 4 || mes == 6
															|| mes == 9 || mes == 11)) {
												dia = 1;
												mes = mes + 1;
											} else if (dia == 28 && mes == 2) {
												dia = 1;
												mes = mes + 1;
											} else if (dia == 31) {
												dia = 1;
												mes = mes + 1;
											}

											if (mes <= 9) {
												objCondConsVO.setValor(dia
														+ "/" + 0 + "" + mes
														+ "/" + (anhoFin - 1));
												objCondConsVO
														.setValor2((dia + 1)
																+ "/" + 0 + ""
																+ mes + "/"
																+ (anhoFin));
											} else {
												objCondConsVO.setValor(dia
														+ "/" + mes + "/"
														+ (anhoFin - 1));
												objCondConsVO
														.setValor2((dia + 1)
																+ "/" + mes
																+ "/"
																+ (anhoFin));
											}
											objCondConsVO
													.setCodFiltro("between");

											// System.out.println("REPORTE EDADES POR IGUAL");
											// System.out.println("FECHA INICIAL "+
											// objCondConsVO.getValor());
											// System.out.println("FECHA FINAL "+
											// objCondConsVO.getValor2());
										}
									}
								}

								lFiltrado.add(objCondConsVO);
								session.setAttribute("ListaFiltrado", lFiltrado);
							}
						}
					} else {
						session.setAttribute("listavfl", coListas);
					}

					try {
						if (!strCodAtributo.equals("nulo")) {
							if (espgen != 1) {
								coListas = repBeneficioOtorgadoServiceImpl
										.findListaAtri(new Long(strCodAtributo));
								if (coListas.size() == 0) {
									coListas = null;
								}

								AtributoVO AtriVO = atributosServiceImpl
										.findAtributoByCodigo(new Long(
												strCodAtributo));

								// proceso para saber el tipo de dato para
								// mostrar el select del filtro
								String strTipoDato = AtriVO.getTipodato();
								session.setAttribute("tipodato", strTipoDato);
								// fin proceso

								if (obAccion.equals("2")) {
									if (ir == 0) {
										Object fil = (Object) session
												.getAttribute("ListaFiltrado");
										if (fil != null) {
											lFiltrado = (List<CondicionConsultaVO>) session
													.getAttribute("ListaFiltrado");
										} else {
											lFiltrado = new LinkedList<CondicionConsultaVO>();
										}

										CondicionConsultaVO objCondConsVO = new CondicionConsultaVO();
										objCondConsVO.setCampo(AtriVO
												.getEtiqueta());
										objCondConsVO.setCodcampo(AtriVO
												.getCodigo());
										objCondConsVO.setOrigen("E");
										objCondConsVO.setTipoCampo(AtriVO
												.getTipodato());
										String filtro = request
												.getParameter("filter");
										int iFiltro = Integer.parseInt(filtro
												.trim());
										objCondConsVO.setCodigo((lFiltrado
												.size()) + "");
										switch (iFiltro) {
										case 1:
											objCondConsVO
													.setFiltro(FiltrosReportesUtil.MAYOR_IGUAL_E);
											objCondConsVO
													.setCodFiltro(FiltrosReportesUtil.MAYOR_IGUAL);
											break;
										case 2:
											objCondConsVO
													.setFiltro(FiltrosReportesUtil.MENOR_IGUAL_E);
											objCondConsVO
													.setCodFiltro(FiltrosReportesUtil.MENOR_IGUAL);
											break;
										case 3:
											objCondConsVO
													.setFiltro(FiltrosReportesUtil.IGUAL_E);
											objCondConsVO
													.setCodFiltro(FiltrosReportesUtil.IGUAL);
											break;
										case 4:
											objCondConsVO
													.setFiltro(FiltrosReportesUtil.DIFERENTE_E);
											objCondConsVO
													.setCodFiltro(FiltrosReportesUtil.DIFERENTE);
											break;
										case 5:
											objCondConsVO
													.setFiltro(FiltrosReportesUtil.MENOR_E);
											objCondConsVO
													.setCodFiltro(FiltrosReportesUtil.MENOR);
											break;
										case 6:
											objCondConsVO
													.setFiltro(FiltrosReportesUtil.MAYOR_E);
											objCondConsVO
													.setCodFiltro(FiltrosReportesUtil.MAYOR);
											break;
										case 7:
											objCondConsVO
													.setFiltro(FiltrosReportesUtil.ENTRE_E);
											objCondConsVO
													.setCodFiltro(FiltrosReportesUtil.ENTRE);
											break;
										case 8:
											objCondConsVO
													.setFiltro(FiltrosReportesUtil.PARECIDO_E);
											objCondConsVO
													.setCodFiltro(FiltrosReportesUtil.PARECIDO);
											break;
										}
										Object obValorComparar = (Object) request
												.getParameter("valor");
										Object obValor2Comparar = (Object) request
												.getParameter("valor2");
										if (obValorComparar != null) {
											if (!AtriVO.getTipodato().equals(
													"F")) {
												objCondConsVO.setValor(request
														.getParameter("valor"));
												objCondConsVO
														.setEtiquetaValor(request
																.getParameter("valor"));
											} else {
												String strFecha = request
														.getParameter("valor");
												String ArrFecha[] = strFecha
														.split("-");
												String strvalor = ArrFecha[2]
														+ "/" + ArrFecha[1]
														+ "/" + ArrFecha[0];
												objCondConsVO
														.setValor(strvalor);
												objCondConsVO
														.setEtiquetaValor(strvalor);
											}
										} else {
											String descVflex = request
													.getParameter("descVflex");
											String codDesc[] = descVflex
													.split("~");
											objCondConsVO.setValor(codDesc[1]);
											objCondConsVO
													.setEtiquetaValor(codDesc[1]);

										}

										if (obValor2Comparar != null) {
											if (!AtriVO.getTipodato().equals(
													"F")) {
												objCondConsVO
														.setValor2(request
																.getParameter("valor2"));
											} else {
												String strFecha = request
														.getParameter("valor2");
												String ArrFecha[] = strFecha
														.split("-");
												String strvalor = ArrFecha[2]
														+ "/" + ArrFecha[1]
														+ "/" + ArrFecha[0];
												objCondConsVO
														.setValor2(strvalor);

											}
										}

										// copiado de SeleccionAction
										// ******************************************************
										// LOGICA PARA CONVERTIR LA EDAD EN
										// FECHAS DE NACIMIENTO
										if (objCondConsVO.getCampo()
												.equalsIgnoreCase("EDAD")) {
											// Setea en el valor el numero
											// de anhos para usar en el jsp
											objCondConsVO
													.setEtiquetaValor(objCondConsVO
															.getValor());
											objCondConsVO
													.setEtiquetaValor2(objCondConsVO
															.getValor2());

											Calendar cal = Calendar
													.getInstance();
											int dia = cal.get(Calendar.DATE);
											int mes = cal.get(Calendar.MONTH) + 1;
											int anho = cal.get(Calendar.YEAR);
											int valor1 = Integer
													.parseInt(objCondConsVO
															.getValor());
											int valor2 = 0;
											int anhoIni = 0;
											int anhoFin = 0;
											anhoFin = anho - valor1;
											if (objCondConsVO.getValor2() != null) {
												valor2 = Integer
														.parseInt(objCondConsVO
																.getValor2());
											}

											// Guarda en el valor1 el anho
											// inicial
											// anhoIni = anho - valor1;
											// Guarda en el valor1 el anho
											// final
											anhoIni = anho - valor2;

											objCondConsVO
													.setCampo(FiltrosReportesUtil.EDAD);
											objCondConsVO
													.setCodcampo(FiltrosReportesUtil.FECHA_NACIMIENTO);
											objCondConsVO
													.setTipoCampo(FiltrosReportesUtil.TIPO_FECHA);

											// Guarda el valor de anhos en
											// formato fecha para usar en el
											// query
											objCondConsVO.setValor(dia + "/"
													+ mes + "/" + anhoIni);
											objCondConsVO.setValor2(dia + "/"
													+ mes + "/" + anhoFin);
										}
										// ******************************************************

										lFiltrado.add(objCondConsVO);
										session.setAttribute("ListaFiltrado",
												lFiltrado);
									}
								}
							} else {
								session.setAttribute("listavfl", coListas);
							}
						}
						session.setAttribute("listavfl", coListas);
					} catch (DAOException e) {
						SUBException.logDebugError("", e);
					}
				}
			}
		}
		return mapping.findForward("success");
	}
}